package net.lzzy.practicesapi1.services;

import net.lzzy.practicesapi1.entities.User;

import java.util.List;
import java.util.UUID;

public interface UserService {
    /**
     * 登陆时检查用户名密码是否正确
     * @param userName 要检查的用户名
     * @param password 要检查的密码
     * @return 匹配正确则返回用户对象
     */
    User check(String userName,String password);

    /**
     * 注册时检查用户名是否已被占用
     * @param userName 要检查的注册用户名称
     * @return 布尔值，是否被占用
     */
    boolean isUserNameOccupied(String userName);

    /**
     * 注册新用户
     * @param user 前端传来的用户信息组装成一个User对象
     * @return 返回注册成功后的User对象
     */
    User register(User user);

    /**
     * 获取用户salt，用于登陆时加密
     * @param userName 要获取salt的用户名
     * @return 返回注册时保存的salt
     */
    String getSalt(String userName);

    /**
     * 获取所有用户
     * @return 用户集合
     */
    List<User> get();

    /**
     * 分页形式获取所有用户
     * @param page 当前页码
     * @param size 每页大小
     * @return 分页返回用户集合
     */
    List<User> get(int page, int size);

    /**
     * 所有用户数据
     * @return 所有用户数量
     */
    Integer count();

    /**
     * 根据关键词搜索用户
     * @param keyword 要搜索的关键词
     * @return 符合条件用户集合
     */
    List<User> search(String keyword);

    /**
     * 获取申请/未申请教师的用户
     * @param apply 是否申请教师
     * @return 符合条件用户集合
     */
    List<User> getApplyTeacher(boolean apply);

    /**
     * 认证通过教师资格申请
     * @param id 申请人ID
     * @return 申请用户对象
     */
    User approveTeacher(UUID id);

    /**
     * 教师申请认证不通过
     * @param id 申请人ID
     * @return 申请用户对象
     */
    User declineTeacher(UUID id);

    /**
     * 禁止用户登录
     * @param id 被禁止用户ID
     * @return 该用户对象
     */
    User banUser(UUID id);
}
